#ifndef __INCdeclarecClassh
#define __INCdeclarecClassh

#define DISABLE_COPY_CLASS(cls)               \
    private:                                  \
        cls(const cls &) = delete;            \
        cls &operator=(const cls &) = delete; \
        cls(cls &&) = delete;                 \
        cls &operator=(cls &&) = delete;

#define DECLARE_SINGLETON(cls)     \
    private:                       \
        cls() = default;           \
        DISABLE_COPY_CLASS(cls);   \
    public:                        \
        static cls *getInstance()  \
        {                          \
            static cls instance;   \
            return &instance;      \
        }

#define DECLARE_CTOR_DTOR(cls)   \
    cls()                        \
    {                            \
        LOG_TRACE(#cls " ctor"); \
    }                            \
    virtual ~cls()               \
    {                            \
        LOG_TRACE(#cls " dtor"); \
    }

#define DECLARE_CTOR_DTOR_DESC(cls) \
    cls(const cls &);               \
    virtual ~cls();

#endif